using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.Alf.Site.Entidades;

namespace MakeIT.Alf.Site.Negocios
{
	public partial class AlfDAO : DAO
	{

		public static LogtipoVO getLogtipo(int? idLogTipo, string sigla, string logTipo)
		{
			LogtipoVO logtipoVO = null;
			List<LogtipoVO> listLogtipoVOs = getLogtipos(idLogTipo, sigla, logTipo);
			if (listLogtipoVOs != null && listLogtipoVOs.Count > 0)
			{
				logtipoVO = listLogtipoVOs[0];
			}
			return logtipoVO;
		}

		public static LogtipoVO getLogtipo(int? idLogTipo)
		{
			return getLogtipo(idLogTipo, null, null);
		}

		public static List<LogtipoVO> getLogtipos()
		{
			return getLogtipos(null, null, null);
		}

		public static List<LogtipoVO> getLogtipos(int? idLogTipo)
		{
			return getLogtipos(idLogTipo, null, null);
		}

		public static List<LogtipoVO> getLogtipos(int? idLogTipo, string sigla, string logTipo)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT logt.idLogTipo as logt_idLogTipo, logt.sigla as logt_sigla, logt.logTipo as logt_logTipo, logt.Cadastro as logt_Cadastro, logt.CadastradoPor as logt_CadastradoPor, logt.Edicao as logt_Edicao, logt.EditadoPor as logt_EditadoPor  ");
			query.AppendLine("FROM logtipo as logt ");
			if (idLogTipo != null)
			{
				query.AppendLine(where + "logt.idLogTipo=@idLogTipo ");
				where = "AND ";
			}
			if (sigla != null)
			{
				query.AppendLine(where + "logt.sigla LIKE @sigla ");
				where = "AND ";
			}
			if (logTipo != null)
			{
				query.AppendLine(where + "logt.logTipo LIKE @logTipo ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY logt.sigla, logt.logTipo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			if (idLogTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@idLogTipo", idLogTipo));
			if (sigla!= null) cmd.Parameters.Add(getParameter(cmd, "@sigla", "%"+sigla+"%"));
			if (logTipo!= null) cmd.Parameters.Add(getParameter(cmd, "@logTipo", "%"+logTipo+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<LogtipoVO> listLogtipo = new List<LogtipoVO>();

				while (reader.Read())
				{
					LogtipoVO logtipoVO = LogtipoVO.CreateVO();
					logtipoVO.idLogTipo = reader.GetInt32(reader.GetOrdinal("logt_idLogTipo"));
					logtipoVO.sigla = reader.GetString(reader.GetOrdinal("logt_sigla"));
					logtipoVO.logTipo = reader.GetString(reader.GetOrdinal("logt_logTipo"));
					logtipoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("logt_Cadastro"));
					logtipoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("logt_CadastradoPor"));
					logtipoVO.edicao = reader.GetDateTime(reader.GetOrdinal("logt_Edicao"));
					logtipoVO.editadoPor = reader.GetString(reader.GetOrdinal("logt_EditadoPor"));


					listLogtipo.Add(logtipoVO);
				}
				reader.Close();
				return listLogtipo;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }
		}

		public static void setLogtipo(LogtipoVO logtipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE logtipo ");
			query.AppendLine("SET sigla=@sigla, logTipo=@logTipo,  Cadastro=@Cadastro, CadastradoPor=@CadastradoPor, Edicao=@Edicao, EditadoPor=@EditadoPor ");
			query.AppendLine("WHERE idLogTipo=@idLogTipo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idLogTipo", logtipoVO.idLogTipo));
			cmd.Parameters.Add(getParameter(cmd, "@sigla", logtipoVO.sigla));
			cmd.Parameters.Add(getParameter(cmd, "@logTipo", logtipoVO.logTipo));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", logtipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", logtipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", logtipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", logtipoVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static long newLogtipo(LogtipoVO logtipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO logtipo ");
			query.AppendLine("  ( sigla, logTipo, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
			query.AppendLine("VALUES ( @sigla, @logTipo, @Cadastro, @CadastradoPor, @Edicao, @EditadoPor ) ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@sigla", logtipoVO.sigla));
			cmd.Parameters.Add(getParameter(cmd, "@logTipo", logtipoVO.logTipo));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", logtipoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", logtipoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", logtipoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", logtipoVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('logtipo') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static void delLogtipo(LogtipoVO logtipoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM logtipo ");
			query.AppendLine("WHERE idLogTipo=@idLogTipo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idLogTipo", logtipoVO.idLogTipo));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}
	}
}
